<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1、定义函数有几种方式
        //  函数声明式
        // function foo() { }
        //  函数表达式
        // var foo = function () { }

        // 2、return 关键字的意义
        // 返回函数的结果和中断函数的运行
        
        // 3、如何理解作用域和作用域链？
        //作用域：一个变量可以生效的范围，就是作用域
        //作用域链：当需要一个变量值的时候现在自己的作用域找，没有的话就一级一级的往上找，直到最大的作用域，有就用，没有就报错
        // 4、请定义一个函数，该函数功能为，传入一个值，返回这个值的平方值
    //    function num(n){
    //     var n = prompt("请输入一个数值")
    //     return n*n;
    //    }
    //     console.log(num());
        // 5、请写出一个函数，功能为：传入三个值，则返回这三个值最大的那个值
        function fn(a,b,c){
            if(a >= b && a >= c){
                return a + "是最大数值"
            }else if(b >= a && b >= c){
                return b + "是最大数值"
            }else if(c >= a && c >= b){
                return c + "是最大数值"
            }else{
                return "请输入正确数值"
            }
        }
        console.log(fn(60,80,90));

        function max(a, b, c) {
            // 方法二：
            var m = a;

            if (m <= b) {
                m = b;
            }

            if (m > c) {
                return m;
            } else {
                return c;
            }
        }
        // 方法三：
        if (a > b && a > c) return a;
            if (b > a && b > c) return b;
            return c;

            // 方法四：
            return Math.max(a, b, c)
        // 6、请定义一个函数，输入一个N值，则计算出该值的阶乘，即：n! = 1*2*3*4*5*6*...*N
        function factorial(n) {
            var result = 1;

            for (var i = 1; i <= n; i++) {
                result *= i;
            }

            return result;
        }

        // 7、定义一个函数，判断这个数是不是完美数，返回结果为布尔值。完美数：它所有的真因子（即除了自身以外的约数）的和（即因子函数），恰好等于它本身。
        // 举例：6 就是一个完美数，6 的约数有 1、2、3、6，除去本身 6 以外，剩下的 1、2、3 就是真因子，而 6 = 1 + 2 + 3 ，所以 6 就是完美数
        function fn(n){
            var sum = 0;
            for(var i = 1; i < n; i++){
                if(n % i == 0){
                    sum +=i;
                }
            }
            return sum == 0;
        }
        console.log(fn(60));
        // //写法二：
        // if(sum == 0){
        //     return true;
        // }else{
        //     return false;
        // }
        // 8、结果输出多少？为什么？
        // var a = 100;

        // function foo() {
        //     console.log(a);  undefined
        //     var a = 200;
        // }
        // foo();
        // console.log(a);//100
        //预解析
        // var a = 100;
        // function foo(){
        //   var a;
        //   console.log(a);
        //   a = 200;
        // }
        // foo()
        // console.log(a);
        //输出结果为：undefined、100
        // 9、结果输出多少？为什么？
        // function foo() {
        //     bar();
        //     var a = 1;
        //     function bar() {
        //         console.log(1);  1
        //         console.log(a); undefined
        //         var a = 2;
        //     }
        // }
        // foo();
        //预解析
        // function foo(){
        //   function bar(){
        //     var a;
        //     console.log(a);
        //      a = 2; 
        //   }
        //   var a;
        //   bar();
        // }
        // foo() 
         //输出结果为：1、undefined
        // 10、结果输出多少？为什么？
        // var a = 1;

        // function foo() {
        //     function bar() {
        //         console.log(a); 1
        //     }
        //     return bar;
        // }

        // function fn(f) {
        //     var a = 2;
        //     f();
        // }

        // var b = foo();
        // fn(b);
        //预解析
//         var a = 1;
//   function foo() {
//   function bar() {
//       console.log(a);
//   }
//   return bar;
// }
//   function fn(f) {
//   var a;
//   a = 2;
//   f();
// }
// var a;
// a = 1;
// var b;
// b = foo();
// fn(b);
    </script>
</body>

</html>